package com.dmgameclient.common;

import android.annotation.SuppressLint;
import android.app.ActivityManager;
import android.content.Context;
import android.graphics.Bitmap;
import android.support.v4.util.LruCache;
import android.util.Log;

/**
 * @name 内存一级缓存
 * @Descripation <br>
 *               1、向缓存中添加图片，从缓存中获取图片。<br>
 *               2、缓存的大小为应用程序的1/8，解决OOM问题。<br>
 * @author 樊俊彬
 * @date 2014-9-9
 * @version 1.0
 */
public class MemoryCache {
	private static final String TAG = "MemoryCache";

	private LruCache<String, Bitmap> lruCache;

	public MemoryCache(Context context) {
		Log.i(TAG, ">>>初始化内存缓存");
		// 系统分配给app的内存的1/8作为缓存
		int maxSize = ((ActivityManager) (context
				.getSystemService(Context.ACTIVITY_SERVICE))).getMemoryClass();
		int cacheSize = maxSize * 1024 * 1024 / 8;
		lruCache = new LruCache<String, Bitmap>(cacheSize) {

			@SuppressLint("NewApi")
			@Override
			protected int sizeOf(String key, Bitmap value) {
				// TODO Auto-generated method stub
				return value.getByteCount();
			}
		};
	}

	/**
	 * 缓存中是否存在key键图片
	 * 
	 * @param key
	 * @return boolean
	 */
	public boolean isBitmapExist(String key) {
		if (getBitmapByKey(key) != null) {
			return true;
		}
		return false;
	}

	/**
	 * 从缓存中获取图片
	 * 
	 * @param key
	 * @return Bitmap
	 */
	public Bitmap getBitmapByKey(String key) {
		if (key != null) {
			// Log.i(TAG, ">>>获取内存缓存中获取图片key=" + key);
			return lruCache.get(key);
		}
		return null;
	}

	/**
	 * 向缓存中添加图片
	 * 
	 * @param key
	 * @param bitmap
	 */
	public void addBitmap(String key, Bitmap bitmap) {
		if (key != null && bitmap != null && getBitmapByKey(key) == null) {
			//Log.i(TAG, ">>>内存缓存中添加图片key=" + key + ",bitmap=" + bitmap);
			lruCache.put(key, bitmap);
		}
	}
}
